package com.weiqiao.mall.service;

import com.weiqiao.mall.domain.AppUserEntity;
import com.weiqiao.mall.service.dto.AppUserDTO;
import com.weiqiao.mall.service.vo.InviterVO;
import com.weiqiao.mall.service.vo.RechargeBalanceVO;
import com.weiqiao.modules.system.service.dto.UserQueryCriteria;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.springframework.data.domain.Pageable;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

public interface IAppUserService {
    /**
     * 查询条数
     *
     * @param filter    查询条件
     * @return int
     */
    int countNum(int company_id, Bson filter);

    /**
     * 通过查询条件返回用户的集合且按创建时间倒序
     * @param company_id 公司id
     * @param filter 查询条件
     * @param pageable 分页
     * @return
     */
    List<AppUserDTO> getAppUserPage(int company_id, Bson filter, Pageable pageable);

    /**
     * 通过查询条件返回用户的集合且按创建时间倒序
     * 区别在于，还需要根据电话号，查询用户信息回填
     * @param company_id 公司id
     * @param filter 查询条件
     * @param pageable 分页
     * @return
     */
    List<AppUserEntity> getCustomerUserPage(int company_id, Bson filter, Pageable pageable);

    /**
     * 根据条件更新客户信息
     * @param doc 更新内容
     * @param filter 查询条件
     * @param company_id 公司id
     * @return
     */
    boolean updateMany(Document doc, Bson filter, int company_id);

    /**
     * 根据条件导出员工信息
     * @param company_id
     * @param filter
     * @return
     */
    List<Map<String, Object>> exportWorkersInfo(int company_id,String type, Bson filter);

    /**
     * 导入员工信息
     * @param companyId 公司id
     * @param inputstream 导入的信息流
     */
    Boolean importWorkersInfo(int companyId, InputStream inputstream);

    /**
     * 通过查询条件返回用户的集合
     * @param filter		查询条件
     * @param company_id	公司id
     * @return list
     */
    List<AppUserEntity> getAppUserListByFilter(Bson filter, int company_id);

    /**
     * 通过条件查询一个用户实体
     * @param filter   		查询条件
     * @param company_id	公司id
     * @return entity
     */
    AppUserEntity getAppUserByFilter(Bson filter, int company_id);

    /**
     * 根据条件查找用户id
     * @param filter 查询条件
     * @param company_id 公司id
     * @return
     */
    List<Integer> getAppUserIdList(Bson filter, int company_id);

    /**
     * 修改用户当前余额接口
     * */
    boolean editRechargeBanlance(RechargeBalanceVO entity);

    /**
     * 获取业务员信息
     * @return
     */
    Object getClerkAndPage(UserQueryCriteria criteria, Pageable pageable);

    /**
     * 更新用户邀请人、业务员信息
     * @param entity
     * @return
     */
    Map updateUserInviter(InviterVO entity);

    /**
     * 更新用户邀请人、业务员信息
     * @param entity
     * @return
     */
    Map updateUserTeam(InviterVO entity);

    /**
     * 获取最大的用户id
     * 当用户不存在时，需要新建用户，获取最大的用户id+1=等于用户id
     * @param companyId 公司id
     * @return
     */
    int getMaxUserId(int companyId);

    /**
     * 更新用户等级
     * @param entity
     * @return
     */
    boolean updateUserMemberType(AppUserEntity entity);
}
